package com.demo.bio.three;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;

/**
 * @author wangning
 * @create 2022-01-04 22:24
 */
public class ServerThreadReader extends Thread {
	private Socket socket;

	public ServerThreadReader(Socket socket) {
		this.socket = socket;
	}
	@Override
	public void run() {
		try {
			//从socket对象中得到一个字节输入流
			InputStream is = socket.getInputStream();
			//使用缓冲字符输入流包装字节输入流
			BufferedReader br = new BufferedReader(new InputStreamReader(is));
			String msg;
			while ((msg = br.readLine()) != null) {
				System.out.println(msg);
			}
		} catch (Exception e) {
			/*
			 * 当客户端断开连接时，Java Socket服务端会收到一个异常，即java.net.SocketException: Connection reset。
			 * 这是因为客户端在关闭连接之前发送了一个RST包，而服务端还在等待客户端发送数据，从而导致连接被重置。
			 * 为了解决这个问题，可以在服务端代码中捕获SocketException异常并进行处理：
			 */
			if (e.getMessage().toLowerCase().contains("reset")) {
				System.out.println("客户端已经断开连接");
			} else {
				e.printStackTrace();
			}
//			System.out.println("ServerThreadReader: " + e.getMessage());
//			e.printStackTrace();
		}

	}
}
